import java.util.Timer;
import java.util.TimerTask;

public class ThermostatWaterTank {
    private static final double MIN_TEMP = 20.0;  // 最低温度
    private static final double MAX_TEMP = 100.0; // 最高温度
    private static final int NIGHT_START_HOUR = 23;  // 晚上11点
    private static final int MORNING_START_HOUR = 7;  // 早上7点

    private double currentTemperature;  // 当前水箱温度
    private boolean isWaterAvailable;   // 水箱是否有水
    private boolean isHeatingOn;        // 继电器电源是否打开
    private boolean isUnderRepair;      // 水箱是否处于维修状态

    public ThermostatWaterTank() {
        this.currentTemperature = 20.0;  // 初始温度
        this.isWaterAvailable = true;    // 假设初始时有水
        this.isHeatingOn = false;        // 初始不加热
        this.isUnderRepair = false;      // 初始状态不需要维修
    }

    // 模拟水箱状态的更新
    public void updateStatus() {
        if (isUnderRepair) {
            System.out.println("水箱正在维修中，无法工作。");
            return;
        }

        // 温度低于20度时启动加热
        if (currentTemperature < MIN_TEMP && isWaterAvailable) {
            turnOnHeating();
        }

        // 温度达到100度时关闭加热
        if (currentTemperature >= MAX_TEMP) {
            turnOffHeating();
        }

        // 每次更新时检查时间，晚上11点进入休眠，早上7点恢复工作
        checkTime();
    }

    // 打开加热器
    private void turnOnHeating() {
        if (!isHeatingOn && isWaterAvailable) {
            isHeatingOn = true;
            System.out.println("加热器已开启，开始加热水箱...");
        }
    }

    // 关闭加热器
    private void turnOffHeating() {
        if (isHeatingOn) {
            isHeatingOn = false;
            System.out.println("加热器已关闭，水箱温度已达到100°。");
        }
    }

    // 检查当前时间
    private void checkTime() {
        int currentHour = java.time.LocalTime.now().getHour();

        if (currentHour == NIGHT_START_HOUR) {
            // 晚上11点，断开电源，进入休眠
            turnOffHeating();
            System.out.println("晚上11点，进入休眠状态...");
        } else if (currentHour == MORNING_START_HOUR) {
            // 早上7点，恢复正常工作
            System.out.println("早上7点，恢复烧水过程...");
        }
    }

    // 模拟水温变化
    public void simulateTemperatureChange() {
        if (isHeatingOn) {
            currentTemperature += 1.0;  // 温度逐渐上升
        } else {
            currentTemperature -= 0.1;  // 温度逐渐下降
        }

        System.out.println("当前水温: " + currentTemperature + "°C");
    }

    // 设置水箱中是否有水
    public void setWaterAvailable(boolean isWaterAvailable) {
        this.isWaterAvailable = isWaterAvailable;
    }

    // 水箱损坏，进入维修状态
    public void repairTank() {
        isUnderRepair = true;
        System.out.println("水箱损坏，正在维修...");
    }

    // 恢复水箱正常工作
    public void resumeNormalOperation() {
        isUnderRepair = false;
        System.out.println("水箱维修完成，恢复正常工作...");
    }

    public static void main(String[] args) {
        ThermostatWaterTank tank = new ThermostatWaterTank();

        // 创建定时器，每隔一定时间更新水箱状态
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                tank.updateStatus();
                tank.simulateTemperatureChange();
            }
        };

        // 每隔1分钟更新一次状态
        timer.schedule(task, 0, 60 * 1000);

        // 模拟水箱操作，设置一些条件
        // 例如，水箱中没有水时不启动加热器
        tank.setWaterAvailable(false);

        // 模拟水箱损坏
        // tank.repairTank();

        // 恢复正常操作
        // tank.resumeNormalOperation();
    }
}
